package cn.fl.project.service;

import java.util.List;

import cmm.mid.core.framework.page.DataResultVO;
import cmm.mid.core.framework.page.KeyValueVO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.project.condition.PrjPrdDtlQueryCondition;
import cn.fl.project.dto.PrjPrdDtlDTO;
import cn.fl.project.vo.PrjPrdDtlCarVO;
import cn.fl.project.vo.PrjPrdDtlTkVO;
import cn.fl.project.vo.PrjPrdDtlVO;

/**
 * @Description: 项目产品明细信息表 客户端服务层接口
 * @Description: 持久层方法名称前缀：新增：insert* 删除：delete* 修改：update* 批量：batch* 查询对象：select* get* find* 查询集合：select*
 * @Description: 业务层方法名称前缀：新增：add* 删除：remove* 修改：modify* 查询对象：select* get* 批量：batch* 查询集合：search*
 */
public interface IPrjPrdDtlService {
	
	/**
	 * 获取唯一对象
	 * @param id 主键
	 * @return 对象DTO
	 */
	public PrjPrdDtlVO selectById(Long id)throws BaseException;
	
	/**
	 * 新增
	 * @param entity
	 * @return
	 */
    public Long add(PrjPrdDtlVO entity) throws BaseException;

    /**
     * 删除
     * @param id
     * @return
     */
    public boolean removeById(Long id)throws BaseException;
    
    /**
     * 删除
     * @param ids
     * @return
     */
    public boolean removeByIds(List<Long> ids)throws BaseException;

    /**
     * 修改
     * @param entity
     * @return
     */
    public boolean modify(PrjPrdDtlVO entity)throws BaseException;

    boolean modifyDtlForOpt(PrjPrdDtlVO entity) throws BaseException;

    /**
     * 分页查询所有
     * @param page
     * @return
     */
    public Pager searchListPage(Pager page)throws BaseException;
    /**
     * 拆分项目产品及产品支付表
     * @param prjPrdId
     * @param prjId
     */
	public void modifySplitPrjPrdAndPaySch(List<Long> prjPrdIdList, Long prjId)throws BaseException;
	/**
	 * 查询列表
	 * @param prjPrdDtlQc
	 * @return
	 */
	public List<PrjPrdDtlVO> selectList(PrjPrdDtlQueryCondition prjPrdDtlQc)throws BaseException;
	/**
	 * 设置产品明细的挂靠公司信息
	 * @param idList
	 * @param lnkCmpId
	 */
	public void modifyPrdDtlLnkComp(List<Long> idList, Long lnkCmpId,String lnkCmpNm, String lnkCmpMsg, String lnkCmpType)throws BaseException;

	/**
	 * 设置产品明细的挂靠公司信息
	 * @param idList
	 * @param lnkCmpId
	 */
	public void modifyPrdDtlLnkCompNew(List<Long> idList, Long lnkCmpId,String lnkCompNm,Long lnkStartLvl, String lnkCmpMsg, String lnkCmpType)throws BaseException;
	/**
	 * 移除挂靠公司
	 * @param idList
	 * @throws BaseException
	 */
	public void removePrdDtlLnkCompByIds(List<Long> idList)throws BaseException;
	/**
	 * 修改车架号等信息
	 * @param dtlId
	 * @param prdMdl
	 * @param engMdl
	 * @throws BaseException
	 */
	public void modifyPrdDtlPrdInfo(PrjPrdDtlVO dtl,PrjPrdDtlTkVO tk,PrjPrdDtlCarVO car)throws BaseException;
	/**
	 * 批量修改产品明细信息
	 * @param list
	 * @return
	 * @throws BaseException
	 */
	public boolean modifyPrjPrdDtlList(List<PrjPrdDtlVO> list)throws BaseException;
	/**
	 * 关联查询支付表信息 
	 * @param page
	 * @return
	 * @throws BaseException
	 */
	public Pager searchPrjPayListPage(Pager page)throws BaseException;
	/**
	 * 修改项目产品明细的挂靠公司和gps号码
	 * @param entity
	 * @return
	 * @throws BaseException
	 */
	public boolean modifyPrjPrdDtlLnkCompGps(PrjPrdDtlVO entity)throws BaseException;
	/**
	 * 查询敞口金额判断是否可以使用该挂靠公司
	 * @param lnkCmpId
	 * @return
	 * @throws BaseException
	 */
	public boolean checkPrjLnkCompCrAmtValue(Long lnkCmpId)throws BaseException;

	/**
	 *  放款流程  换车
	 *  @param  auth 是否能跨品牌车系换车
	 */
	void modifyPrd(Long dtlId, Long styleId, String carLen, String prdLvlCd, String auth,String prdCd);

	/**
	 * 根据条件查询一个
	 * @param condition
	 * @return
	 */
	PrjPrdDtlVO selectOneByCondition(PrjPrdDtlQueryCondition condition);

	/**
	 * 有保险分期的首付款
	 * @return
	 */
	public Long[] downPaymentAmount(Long prjPrdDtlId, Long paySchId)throws BaseException;

	/**
	 * 检查项目产品 通过了VIN验证
	 * @param prjPrdDtlDTOS
	 * @param nullAble 空VIN是否算通过
	 * @return
	 */
	boolean checkValidVinSts(List<PrjPrdDtlDTO> prjPrdDtlDTOS,boolean nullAble);

    /**
     * 校验挂靠公司可支持挂靠项目是否选择二手车业务
     * @param
     * @return
     */
    DataResultVO checkLnkIsChooseUsedCar(String lnkCompId, String prjTypCd) throws BaseException;

	/**
	 * 根据条件查询所有外派业务管理二级列表
	 * @param condition
	 * @return
	 */
	public List<PrjPrdDtlVO> selectExpBusTwoList(PrjPrdDtlQueryCondition condition) throws BaseException;

	/**
	 * 商家 轻卡 修改挂靠公司
	 * @param entity
	 * @return
	 * @throws BaseException
	 */
	public boolean modifyLnkByLcv(PrjPrdDtlVO entity) throws BaseException;
}
